/**
 * 创建时间： 2017年5月4日
 *
 * @Copyright 武汉雷软科技有限公司
 */
package com.lrkj.framework.constant.im;

import org.apache.commons.lang3.tuple.ImmutablePair;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <pre>
 * 创建人： 黄小磊
 * 类描述：
 * 版本号：0.0.1
 * 修改人：
 * 修改时间：
 * 修改内容：
 * </pre>
 */

public interface Table {
    /**
     * 手术信息表
     */
    interface OperationFlow {


        /**
         * 进出手术部 状态字段
         */
        interface OperationInRoom {
            /**
             * 未进入手术部
             */
            Integer IN_ROOM_0 = 0;
            /**
             * 转入手术部
             */
            Integer IN_ROOM_1 = 1;
            /**
             * 出手术部
             */
            Integer IN_ROOM_2 = 2;
        }

        /**
         * 手术信息 接收状态
         */
        interface OperationReciever {
            /**
             * 接收
             */
            Integer RECIEVER_1 = 1;
            /**
             * 未接收
             */
            Integer RECIEVER_0 = 0;

        }

        /**
         * 手术流程 状态
         */
        interface OperationState {
            /**
             * 待手术
             */
            Integer STATE_0 = 0;
            /**
             * 转入手术室
             */
            Integer STATE_1 = 1;
            /**
             * 预麻
             */
            Integer STATE_2 = 2;
            /**
             * 麻醉开始,手术未开始
             */
            Integer STATE_3 = 3;
            /**
             * 手术开始
             */
            Integer STATE_4 = 4;
            /**
             * 手术结束
             */
            Integer STATE_5 = 5;
            /**
             * 转入恢复室
             */
            Integer STATE_6 = 6;
            /**
             * 转出恢复室
             */
            Integer STATE_7 = 7;

        }

        /**
         * 是否非计划二次手术
         */
        interface UnplanedReoperation {
            /**
             * 非计划二次手术
             */
            Integer YES = 1;
            /**
             * 一般手术
             */
            Integer NO = 0;
        }

        /**
         * 手术类型
         */
        interface OperationType {
            /**
             * 普通手术
             */
            String TYPE_1 = "01";
            /**
             * 腔镜手术
             */
            String TYPE_2 = "02";
            /**
             * 显微手术
             */
            String TYPE_3 = "03";
        }

        /**
         * 病人去向
         */
        interface PatientLocation{
            /**
             * 无
             */
            Integer LOCATION_0=0;
            /**
             * 复苏室
             */
            Integer LOCATION_1=1;
            /**
             * ICU
             */
            Integer LOCATION_2=2;
            /**
             * 病房
             */
            Integer LOCATION_3=3;
            /**
             * 其他
             */
            Integer LOCATION_4=4;

            Map<Integer,String> LOCATION_MAP=Collections.unmodifiableMap(new HashMap<Integer,String>(){{put(LOCATION_1,"复苏室");put(LOCATION_2,"ICU");put(LOCATION_3,"病房");put(LOCATION_4,"其他");}});
        }
    }

    /**
     * 手术室 硬件状态指标
     */
    interface RoomsetEnvironment {

        /**
         * 灯光类——无影灯
         */
        interface LightAmsco {
            /**
             * 开灯状态 1
             */
            Integer UP_1 = 1;
            /**
             * 关灯状态
             */
            Integer CLOSE_0 = 0;
        }

        /**
         * 灯光类——灯带1
         */
        interface LightBulbOne {
            /**
             * 开灯状态 1
             */
            Integer UP_1 = 1;
            /**
             * 关灯状态
             */
            Integer CLOSE_0 = 0;
        }

        /**
         * 灯光类——灯带2
         */
        interface LightBulbTwo {
            /**
             * 开灯状态 1
             */
            Integer UP_1 = 1;
            /**
             * 关灯状态
             */
            Integer CLOSE_0 = 0;
        }

        /**
         * 灯光类——看片箱
         */
        interface LightViewingBox {
            /**
             * 开灯状态 1
             */
            Integer UP_1 = 1;
            /**
             * 关灯状态
             */
            Integer CLOSE_0 = 0;
        }

        /**
         * 空调类——空调开关机
         */
        interface ConditionSwitch {
            /**
             * 开机状态 1
             */
            Integer UP_1 = 1;
            /**
             * 关机状态0
             */
            Integer CLOSE_0 = 0;
        }

        /**
         * 空调类——正负压
         */
        interface ConditionAlternatingPreaaure {
            /**
             * 正压1
             */
            Integer UP_1 = 1;
            /**
             * 负压0
             */
            Integer CLOSE_0 = 0;

        }

        /**
         * 空调类——急降
         */
        interface ConditionPelt {
            /**
             * 增升1
             */
            Integer UP_1 = 1;
            /**
             * 急降0
             */
            Integer CLOSE_0 = 0;

        }

        /**
         * 空调类——值班
         */
        interface ConditionCheckIn {
            /**
             * 值班1
             */
            Integer UP_1 = 1;
            /**
             * 待机0
             */
            Integer CLOSE_0 = 0;

        }

        /**
         * 故障指标 ——空调故障
         */
        interface EnvConditionFaults {
            /**
             * 正常
             */
            Integer UP_1 = 1;
            /**
             * 故障
             */
            Integer CLOSE_0 = 0;
        }

        /**
         * 故障指标 ——过滤器故障
         */
        interface EnvFilter {
            /**
             * 正常
             */
            Integer UP_1 = 1;
            /**
             * 故障
             */
            Integer CLOSE_0 = 0;
        }

        /**
         * 故障指标 ——隔离电源故障
         */
        interface RestFaultOne {
            /**
             * 正常
             */
            Integer UP_1 = 1;
            /**
             * 故障
             */
            Integer CLOSE_0 = 0;
        }

        /**
         * 故障指标 ——气体报警故障
         */
        interface RestFaultTwo {
            /**
             * 正常
             */
            String UP_1 = "1";
            /**
             * 故障
             */
            String CLOSE_0 = "0";
        }

    }

    /**
     * 手术室 自身 状态指标
     */
    interface RoomsetUsestate {
        /**
         * 手术室状态 ——工作站开关机
         */
        interface RoomsetStartup {
            /**
             * 工作站——开机
             */
            Integer UP_1 = 1;
            /**
             * 工作站——关机
             */
            Integer CLOSE_0 = 0;
        }

        /**
         * 手术室状态 ——手术室是否被占用
         */
        interface RoomsetOpState {
            /**
             * 占用状态1
             */
            Integer UP_1 = 1;
            /**
             * 没被占用状态0
             */
            Integer CLOSE_0 = 0;
        }

        /**
         * 手术室状态——清洁状态(不需要清洁)
         */
        interface RoomsetCleanState {
            /**
             * 清洁完成（初始状态）
             */
            Integer CLEANSTATE_0 = 0;
            /**
             * 需要清洁
             */
            Integer CLEANSTATE_1 = 1;
            /**
             * 清洁中
             */
            Integer CLEANSTATE_2 = 2;
        }

        /**
         * 手术室状态——工作站流程状态
         */
        interface OperationState {
            /**
             * 工作站——转入手术室
             */
            String OPERATION_STATE_1 = "转入手术室";
            /**
             * 工作站——麻醉开始
             */
            String OPERATION_STATE_3 = "麻醉开始";
            /**
             * 工作站——手术开始
             */
            String OPERATION_STATE_4 = "手术开始";
            /**
             * 工作站——手术结束(需要清洁1)
             */
            String OPERATION_STATE_5 = "手术结束";
            /**
             * 工作站——清洁中
             */
            String ROOMSET_CLEAN_STATE_2 = "清洁中";
            /**
             * 工作站——清洁结束
             */
            String ROOMSET_CLEAN_STATE_0 = "清洁结束";

        }
    }

    /**
     * 清洁流水表 中字段常量
     */
    interface CleanWater {
        /**
         * 清洁状态
         */
        interface CleanState {
            /**
             * 清洁开始
             */
            Integer CLEAN_1 = 1;
            /**
             * 清洁结束
             */
            Integer CLEAN_2 = 2;

        }
    }

    /**
     * 手术室基础配置表
     */
    interface Roomset {
        /**
         * 手术室 等级
         */
        interface RoomsetClass {

            /**
             * Ⅰ级 特级
             */
            Integer RANK_1 = 1;
            /**
             * Ⅱ级 大级
             */
            Integer RANK_2 = 2;
            /**
             * Ⅲ级 中级
             */
            Integer RANK_3 = 3;
            /**
             * Ⅳ级 小级
             */
            Integer RANK_4 = 4;
            /**
             * 所以集合
             */
            Integer[] RANK_LIST = {RANK_1, RANK_2, RANK_3, RANK_4};

        }

        /**
         * 手术室报警箱
         */
        interface RoomsetAlarmbox {
            /**
             * 报警箱1
             */
            String BOX_1 = "AlarmBox1";
            /**
             * 报警箱2
             */
            String BOX_2 = "AlarmBox2";
        }
    }

    /**
     * 手术模板表
     */
    interface Template {
        /**
         * 手术等级
         */
        interface OperationLevel {
            /**
             * 特级
             */
            Integer LEVEL_4 = 4;
            /**
             * 大级
             */
            Integer LEVEL_3 = 3;
            /**
             * 中级
             */
            Integer LEVEL_2 = 2;
            /**
             * 小级
             */
            Integer LEVEL_1 = 1;
            /**
             * 手术等级集合数组
             */
            Integer[] OPERATIONLEVEL = {LEVEL_1, LEVEL_2, LEVEL_3, LEVEL_4};

            String[] OPERATIONLEVEL_STR = {"小级", "中级", "大级","特级" };

        }

        /**
         * 手术类别 分类第一类
         */
        interface TemplateTypeOne {
            /**
             * 普通手术
             */
            Integer TYPE_1 = 1;
            /**
             * 腔镜手术
             */
            Integer TYPE_2 = 2;
            /**
             * 显微手术
             */
            Integer TYPE_3 = 3;
            /**
             * 防辐射手术
             */
            Integer TYPE_4 = 4;
            /**
             * 脑科手术
             */
            Integer TYPE_5 = 5;

            /**
             * /** 数组集合
             */
            Integer[] TYPEONE_LIST = {TYPE_1, TYPE_2, TYPE_3, TYPE_4, TYPE_5};

            String[] TYPESTR_LIST = {"普通手术", "腔镜手术", "显微手术", "防辐射手术", "脑科手术"};
        }

        /**
         * 手术体位 （仰卧位 、侧卧位、半侧卧位、俯卧位、半坐位、膀胱结石位）
         */
        interface OperationPostion {
            String[] POSTION_LIST = {"仰卧位 ", "侧卧位", "半侧卧位", "俯卧位", "半坐位", "膀胱结石位"};
        }

        /**
         * 手术切口
         */
        interface OperationIncision {
            String[] INCISION_LIST = {};
        }

        /**
         * 手术切口等级: Ⅰ类（清洁）切口：手术未进入炎症区，未进入呼吸、消化及泌尿生殖道，以及闭合性创伤手术符合上述条件者
         * <p>
         * Ⅱ类（清洁-污染）切口：手术进入呼吸、消化或泌尿生殖道但无明显污染，例如无感染且顺利完成的胆道、胃肠道、阴道、口咽部手术
         * <p>
         * Ⅲ类（污染）切口：新鲜开放性创伤手术；手术进入急性炎症但未化脓区域；胃肠道内容有明显溢出污染；术中无菌技术有明显缺陷（如开胸心脏按压）者
         * <p>
         * Ⅳ类（污秽-感染）切口：有失活组织的陈旧创伤手术；已有临床感染或脏器穿孔的手术
         */
        interface OperationIncisionLevel {
            /**
             * Ⅰ类（清洁）切口
             */
            Integer INCISIONLEVEL_1 = 1;
            /**
             * Ⅱ类（清洁-污染）
             */
            Integer INCISIONLEVEL_2 = 2;
            /**
             * Ⅲ类（污染）切口
             */
            Integer INCISIONLEVEL_3 = 3;
            /**
             * Ⅳ类（污秽-感染）
             */
            Integer INCISIONLEVEL_4 = 4;
        }

        /**
         * 手术麻醉方案： 表面麻醉, 局部浸润麻醉, 区域阻滞麻醉,周围神经阻滞麻醉, 静脉局部麻醉,蛛网膜下隙阻滞麻醉（腰麻）,
         * 硬脊膜外隙阻滞麻醉,吸入麻醉,静脉麻醉,肌肉麻醉,直肠麻醉
         */
        interface OperationAnaesthesia {
            String[] ANAES_LIST = {"表面麻醉", "局部浸润麻醉", "区域阻滞麻醉", "周围神经阻滞麻醉", "静脉局部麻醉", "蛛网膜下隙阻滞麻醉（腰麻）", "硬脊膜外隙阻滞麻醉",
                    "吸入麻醉", "静脉麻醉", "肌肉麻醉", "直肠麻醉"};
        }

        /**
         * 正名标志
         */
        interface StdIndicator {
            /**
             * 正名
             */
            String STD_1 = "1";
            /**
             * 非正名
             */
            String STD_0 = "0";

        }

        /**
         * 批准标志
         */
        interface ApprovedIndicator {
            /**
             * 已批准
             */
            String APPROVED_1 = "1";
            /**
             * 未批准
             */
            String APPROVED_0 = "0";
        }
    }

    /**
     * 手术排班表
     */
    interface OperationArray {
        /**
         * 手术排班状态
         */
        interface OperationNeedPb {
            /**
             * 已排班
             */
            Integer NEEDPB_1 = 1;
            /**
             * 未排班
             */
            Integer NEEDPB_0 = 0;
        }

        /**
         * 申请查看 某时间区间 是否被选中
         */
        interface OperationNeedMz {
            /**
             * 已安排
             */
            Integer NEEDMZ_1 = 1;
            /**
             * 未安排
             */
            Integer NEEDMZ_0 = 0;
        }

        /**
         * 手术类型 1急诊 0平诊
         */
        interface OperationIsEmergency {
            /**
             * 急诊
             */
            String ISEMERGENCY_1 = "1";
            /**
             * 平诊
             */
            String ISEMERGENCY_0 = "0";
        }
    }

    /**
     * 员工表
     */
    interface Employee {
        /**
         * 是否超级管理员
         */
        interface EmployeeSuper {
            /**
             * 超级管理员
             */
            Integer SUPER_1 = 1;
            /**
             * 普通员工
             */
            Integer SUPER_0 = 0;
        }

        /**
         * param1 职称或职位  1、护士长 2、护士 3、手术医师 4、麻醉医师 5 主任 6、 护工、
         */
        interface Param1 {
            /**
             * 护士长
             */
            String TYPE_1 = "1";
            /**
             * 护士
             */
            String TYPE_2 = "2";
            /**
             * 手术医师
             */
            String TYPE_3 = "3";
            /**
             * 麻醉医师
             */
            String TYPE_4 = "4";
            /**
             * 主任
             */
            String TYPE_5 = "5";
            /**
             * 护工
             */
            String TYPE_6 = "6";

            String[] PARAM1_LITS = {"护士长", "护士", "手术医师", "麻醉医师", "主任", "护工"};
        }
    }

    /**
     * 手术申请
     */
    interface OperationApply {
        /**
         * 申请状态
         */
        interface ApplyState {
            /**
             * 申请
             */
            Integer STATE_0 = 0;
            /**
             * 通过
             */
            Integer STATE_1 = 1;
            /**
             * 驳回
             */
            Integer STATE_2 = 2;
            /**
             * 撤销
             */
            Integer STATE_3 = 3;
        }
    }

    /**
     * 公告
     */
    interface Noticle {
        /**
         * 公告位置 全部、家属区、换鞋区、护士站、清洁区、网站上
         */
        interface Position {
            /**
             * 所以位置
             */
            Integer POS_0 = 0;
            /**
             * 家属区
             */
            Integer POS_1 = 1;
            /**
             * 换鞋区
             */
            Integer POS_2 = 2;
            /**
             * 护士站
             */
            Integer POS_3 = 3;
            /**
             * 清洁区
             */
            Integer POS_4 = 4;
            /**
             * 网址上
             */
            Integer POS_5 = 5;
        }
    }

    /**
     * 厂家通讯录
     */
    interface Vender {
        /**
         * 类型
         */
        interface VenderType {
            /**
             * 硬件
             */
            Integer TYPE_1 = 1;
            /**
             * 软件
             */
            Integer TYPE_2 = 2;


        }
    }

    /**
     * 库存
     */
    interface Inventory {
        /**
         * 参数使用
         */
        interface Setting {
            /**
             * 使用
             */
            Integer SET_ON = 1;
            /**
             * 停用
             */
            Integer SET_OFF = 0;

            Integer[] SETS = {SET_ON, SET_OFF};
            String[] SET_STR = {"使用", "停用"};
        }
    }

    /**
     * 模板包
     */
    interface PackageMuban {
        /**
         * 类型
         */
        interface PackageCategory {
            /**
             * 单封包
             */
            Integer TYPE_0 = 0;
            /**
             * 通用包
             */
            Integer TYPE_1 = 1;

            String[] TYPE_LIST = {"单封包", "通用包"};
        }
    }

    /**
     * 器械
     */
    interface Instrument {
        /**
         * 清点阶段
         */
        interface Type {
            /**
             * 术前清点
             */
            Integer FIRST = 1;
            /**
             * 术中清点
             */
            Integer SECOND = 2;
            /**
             * 术后清点
             */
            Integer THIRD = 3;
        }

        /**
         * 器械状态
         */
        interface State {

            /**
             * 正常
             */
            Integer NORMAL = 0;
            /**
             * 异常
             */
            Integer ABNORMAL = 1;
        }

        /**
         * 清点状态
         */
        interface Check {
            /**
             * 清点完成
             */
            Integer COMPLETE = 1;
            /**
             * 未清点
             */
            Integer UNCOMPLETE = 0;
        }
    }

    /**
     * 包使用
     */
    interface PackUse {
        /**
         * 操作类型
         */
        interface OperType {
            /**
             * 使用
             */
            Integer TYPE_1 = 1;
            /**
             * 退回
             */
            Integer TYPE_0 = 0;
        }

        /**
         * 包类型
         */
        interface GoodsType {
            /**
             * 手术包（有条码）
             */
            Integer TYPE_1 = 1;
            /**
             * 其他（无条码）
             */
            Integer TYPE_2 = 2;
        }

    }

    /**
     * 打分 事件
     */
    interface Mark {

        /**
         * 打分单位
         */
        interface Marklist {


            String TYPE_0 = "0"; //次

            String TYPE_1 = "1"; //台

            String TYPE_2 = "2"; //100ml

            String TYPE_3 = "3"; //人份

            String TYPE_4 = "4"; //单位

            String[] M_LIST = {"次", "台", "100ml", "人份", "单位"};

        }
    }

    /**
     * 开台分
     */
    interface MarkFun {
        /**
         * 特殊
         */
        String SPEC = "1";
    }

}
